盒子
盒子
文章目录
  1. docker-spigot
    1. Dockerfile:
    2. docker run
  2. 访问仓库
    1. Docker Hub
    2. 私有仓库
  3. 数据管理
    1. 数据卷
    2. 数据卷容器
    3. 备份、恢复、迁移数据卷

Docker 学习日记 Day3

docker-spigot

Dockerfile:

  1. FROM nimmis/java:openjdk-8-jdk:指定基础镜像,配置 java 环境
  2. ENV SPIGOT_HOME=/minecraft \:SPIGOT-server 的默认目录
    SPIGOT_VER=latest \:默认版本为最新
    SPIGOT_AUTORESTART=yes:结合 readme 里写的,应该是如果 mc 内部的 stop 出了问题,就重新启动
  3. COPY rootfs /:复制额外需要的文件

    rootf 中:
    waitjava.sh 处理 mc 错误的 stop 命令,在 supervisor/conf.d 里调用了 waitjava.sh
    在 usr/local/bin 中指定了常用简便指令,eg:mc_stop

    • mc_log/etc/init.d/minecraft_server log
      查阅 /etc/init.d/minecraft_server 可发现:
      log)
      echo “Abort with CTRL-C”
      tail -f $MC_DIR/output.con

      即输出日志
    • mc_restartsupervisorctl restart spigot
      supervisor 主要由两部分组成:
      1.supervisord (server 部分):主要负责管理子进程,响应客户端命令以及日志的输出等;
      2.supervisorctl (client 部分):命令行客户端,用户可以通过它与不同的 supervisord 进程联系,获取子进程的状态等。
    • mc_sendecho “/etc/init.d/minecraft_server send \”$1\””
      /etc/init.d/minecraft_server send “$1 $2 $3 $4 $5”
      mc_log
  1. RUN apt-get update && \
    apt-get -y dist-upgrade && \
    printf “Build of nimmis/spigot:latest, date: %s\n” date -u +"%Y-%m-%dT%H:%M:%SZ" > /etc/BUILDS/spigot && \:更新,并且更新一次就写一个更新文件,里面写明了更新的时间
    apt-get install -y wget git && \:下载
    /usr/sbin/useradd -s /bin/bash -d /minecraft -m minecraft && \:为 mc 创建特别用户
    apt-get clean all:清理镜像中的缓存
  2. EXPOSE 25565:声明容器提供服务端口

docker run

docker run -d -p 25565:25565 -e EULA=true nimmis/spigot:指定端口,并同意最终用户协议


访问仓库

仓库(Repository)是集中存放镜像的地方。一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 dl.dockerpool.com/ubuntu 来说,dl.dockerpool.com 是注册服务器地址,ubuntu 是仓库名

Docker Hub

docker search
docker pull
docker push

私有仓库

docker-registry工具
安装:sudo pip3 install docker-registry

数据管理

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。

也可以在 Dockerfile 中使用 VOLUME 来添加一个或者多个新的卷到由该镜像创建的任意容器

删除数据卷:可以在删除容器的时候使用 docker rm -v 这个命令

使用 -v 标记也可以指定挂载一个本地主机的目录到容器中去。本地目录的路径必须是绝对路径,如果目录不存在 Docker 会自动为你创建它。Dockerfile 中不支持这种用法

数据卷容器

如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器
数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的

  1. 创建一个名为 dbdata 的数据卷容器
    sudo docker run -d -v /dbdata –name dbdata training/postgres echo Data-only container for postgres
  2. 在其他容器中使用 –volumes-from 来挂载 dbdata 容器中的数据卷
    sudo docker run -d –volumes-from dbdata –name db1 training/postgres
    sudo docker run -d –volumes-from dbdata –name db2 training/postgres

使用 –volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态

备份、恢复、迁移数据卷